package com.lingchou.cloud.process.api.dto.result;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Map;

/**
 * 历史任务实例统一返回类
 *
 * @author LingChou
 */
@Setter
@Getter
@ToString
@Builder
@ApiModel(value = "HistoricTaskInstanceDTO", description = "历史任务实例统一返回类")
public class HistoricTaskInstanceDTO {
    /**
     * 任务的数据库ID
     */
    @ApiModelProperty(value = "任务的数据库ID")
    private String id;

    /**
     * 任务名称或标题
     */
    @ApiModelProperty(value = "任务名称或标题")
    private String name;

    /**
     * 任务的自由文本描述。
     */
    @ApiModelProperty(value = "任务的自由文本描述")
    private String description;

    /**
     * 表明此任务有多重要/紧急
     */
    @ApiModelProperty(value = "表明此任务有多重要/紧急")
    private int priority;

    /**
     * 负责此任务的人员。
     */
    @ApiModelProperty(value = "负责此任务的人员")
    private String owner;

    /**
     * 此任务委派给的人。
     */
    @ApiModelProperty(value = "此任务委派给的人")
    private String assignee;

    /**
     * 对流程实例的引用；如果与流程实例无关，则为null。
     */
    @ApiModelProperty(value = "对流程实例的引用ID")
    private String processInstanceId;

    /**
     * 引用流程定义标识符，如果与流程无关，则为null。
     */
    @ApiModelProperty(value = "引用流程定义标识符ID")
    private String processDefinitionId;

    /**
     * 创建此任务的日期/时间
     */
    @ApiModelProperty(value = "创建此任务的日期/时间")
    private LocalDateTime createTime;

    /**
     * 任务截止日期
     */
    @ApiModelProperty(value = "任务截止日期")
    private LocalDate dueDate;

    /**
     * 此任务为其子任务的父任务
     */
    @ApiModelProperty(value = "此任务为其子任务的父任务")
    private String parentTaskId;

    /**
     * 此任务的租户标识符
     */
    @ApiModelProperty(value = "此任务的租户标识符")
    private String tenantId;

    /**
     * 返回本地任务变量
     */
    @ApiModelProperty(value = "返回本地任务变量")
    private Map<String, Object> taskLocalVariables;

    /**
     * 返回过程变量
     */
    @ApiModelProperty(value = "返回过程变量")
    private Map<String, Object> processVariables;

    /**
     * 此任务的声明时间
     */
    @ApiModelProperty(value = "此任务的声明时间")
    private LocalDateTime claimTime;

    /**
     * 删除此任务的原因{'已完成'| '已删除'|任何其他用户定义的字符串}.
     */
    @ApiModelProperty(value = "删除此任务的原因{'已完成'| '已删除'|任何其他用户定义的字符串}")
    private String deleteReason;

    /**
     * 任务被删除或完成的时间。
     **/
    @ApiModelProperty(value = "任务被删除或完成的时间")
    private LocalDateTime endTime;

    /**
     * startTime与endTime两者之间的差（以毫秒为单位）。
     * 持续时间
     */
    @ApiModelProperty(value = "持续时间毫秒数")
    private Long durationInMillis;

    /**
     * ClaimTime 与 endTime两者之间的差（以毫秒为单位）。
     * 工作时间
     */
    @ApiModelProperty(value = "工作时间毫秒数")
    private Long workTimeInMillis;

    /**
     * 选人范围
     */
    @ApiModelProperty(value = "选人范围")
    private String selectionRange;

    /**
     * taskDefId
     */
    @ApiModelProperty(value = "taskDefId")
    private String taskDefId;
}
